#define _CRT_SECURE_NO_WARNINGS 1

#include<iostream>
#include<vector>
#include<string>


using namespace std;
//
//int mod = 1000000007;
//
//int mergeSort(int left, int right, vector<int>& nums, vector<int>& tmp)
//{
//    if (left >= right)
//        return 0;
//    int mid = (left + right) / 2;
//    int ret = mergeSort(left, mid, nums, tmp) + mergeSort(mid + 1, right, nums, tmp);
//    ret %= mod;
//
//    int i = left;
//    int j = mid + 1;
//    for (int k = left; k <= right; k++)
//        tmp[k] = nums[k];
//    for (int k = left; k <= right; k++)
//    {
//        if (i == mid + 1)
//            nums[k] = tmp[j++];
//        else if (tmp[j] < tmp[i])
//        {
//            nums[k] = tmp[j++];
//            ret += mid + 1 - i;
//        }
//        else
//        {
//            nums[k] = tmp[i++];
//        }
//    }
//    ret %= mod;
//    return ret;
//}
//
//
//int InversePairs(vector<int>& nums) {
//    int n = nums.size();
//    vector<int> tmp(n);
//    return mergeSort(0, n - 1, nums, tmp);
//}
//
//int main()
//{
//    vector<int> nums = { 1,2,3,4,5,6,7,0 };
//    cout << InversePairs(nums) << endl;
//
//    return 0;
//}



//int main()
//{
//	string s("hello world xxx");
//	int pos = s.rfind(' ');
//	cout << pos << endl;
//
//	pos = s.rfind(' ',pos-1);
//	cout << pos << endl;
//
//	return 0;
//}



//string solve(string IP) {
//    // "IPv4"
//    string tmp(IP);
//    if (tmp.find('.') != string::npos)
//    {
//        int pos = tmp.find('.');
//        for (int i = 0; i < 2; i++)
//        {
//            pos = tmp.find('.', pos + 1);
//            if (pos == string::npos)
//                return "Neither1";
//        }
//
//        int i = 0;
//        int ret = 0;
//        while (i < tmp.size())
//        {
//            if (tmp[i] == '0' || ret > 255)
//            {
//                return "Neither2";
//            }
//            ret = 0;
//            while (tmp[i] != '.' && i< tmp.size())
//            {
//                ret = ret * 10 + tmp[i++] - '0';
//            }
//            i++;
//        }
//        return "IPv4";
//    }
//}


string solve(string IP)
{
    string tmp(IP);
    if (tmp.find(':') != string::npos)
    {
        int pos = tmp.find(':');
        for (int i = 0; i < 6; i++)
        {
            pos = tmp.find(':', pos + 1);
            if (pos == string::npos)
                return "Neither1";
        }

        int j = 0;
        int flag = 1;
        while (flag)
        {
            flag = 1;
            int p = tmp.find(':');
            if (p == string::npos)
            {
                p = tmp.size();
                flag = 0;
            }
            if (p == 0 || p > 4)
                return "Neither2";
            for (int i = 0; i < p; i++)
            {
                if (!((tmp[i] >= '0' && tmp[i] <= '9') || (tmp[i] >= 'a' && tmp[i] <= 'f')
                    || (tmp[i] >= 'A' && tmp[i] <= 'F')))
                    return "Neither3";
            }
            if(flag)
                tmp = tmp.substr(p + 1);
        }
        return "IPv6";
    }
}


int main()
{
    cout << solve("2001:0db8:85a3:0:0:8A2E:0370:7334") << endl;
    return 0;
}



